package com.powernode.driver.service.impl;

import com.powernode.common.execption.PowerException;
import com.powernode.common.result.ResultCodeEnum;
import com.powernode.driver.client.DriverInfoFeignClient;
import com.powernode.driver.service.LocationService;
import com.powernode.map.client.LocationFeignClient;
import com.powernode.model.entity.driver.DriverSet;
import com.powernode.model.form.map.OrderServiceLocationForm;
import com.powernode.model.form.map.UpdateDriverLocationForm;
import com.powernode.model.form.map.UpdateOrderLocationForm;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 位置服务实现类
 * 该类负责处理配送员位置相关的业务逻辑，包括更新配送员位置
 */
@Slf4j
@Service
@SuppressWarnings({"unchecked", "rawtypes"})
public class LocationServiceImpl implements LocationService {
    @Resource
    private LocationFeignClient locationFeignClient;// 地图服务Feign客户端，用于调用地图服务
    @Resource
    private DriverInfoFeignClient driverInfoFeignClient;// 配送员信息Feign客户端，用于调用配送员信息服务

    /**
     * 更新配送员位置
     *
     * @param updateDriverLocationForm 配送员位置更新表单，包含配送员ID和位置信息
     * @return 返回更新结果，成功返回true，失败返回false
     */
    @Override
    public Boolean updateDriverLocation(UpdateDriverLocationForm updateDriverLocationForm) {
        // 通过Feign客户端获取配送员设置信息
        DriverSet driverSet = driverInfoFeignClient.getDriverSet(updateDriverLocationForm.getDriverId()).getData();
        // 检查配送员服务状态是否为1（服务中状态）
        if (driverSet.getServiceStatus() == 1) {
            // 调用地图服务更新配送员位置信息，并返回操作结果
            return locationFeignClient.updateDriverLocation(updateDriverLocationForm).getData();
        }
        // 如果配送员未开启服务，抛出业务异常
        throw new PowerException(ResultCodeEnum.NO_START_SERVICE);
    }

    /**
     * 更新订单位置到缓存
     *
     * @param updateOrderLocationForm 包含订单位置信息的表单对象
     * @return 操作成功结果
     */
    @Override
    public Boolean updateOrderLocationToCache(UpdateOrderLocationForm updateOrderLocationForm) {
        return locationFeignClient.updateOrderLocationToCache(updateOrderLocationForm).getData();
    }

    /**
     * 保存订单服务位置
     *
     * @param orderLocationServiceFormList 订单服务位置表单列表
     * @return 操作成功结果
     */
    @Override
    public Boolean saveOrderServiceLocation(List<OrderServiceLocationForm> orderLocationServiceFormList) {
        return locationFeignClient.saveOrderServiceLocation(orderLocationServiceFormList).getData();
    }
}
